package socketmvc.server.context;

import socketmvc.core.context.IContext;
import socketmvc.core.packets.basic.IPacket;

import java.util.concurrent.Future;

public interface IChannelContext extends IContext {
    /**
     * 将数据包发送到绑定user的context
     * @param user user
     * @param packet 数据包
     * @return 发送是否成功
     */
    boolean sendToUser(String user, IPacket packet);

    /**
     * 将数据包发送到绑定user的context,并等待响应结果
     * @param user user
     * @param packet 数据包
     * @return 等待结果
     */
    Future<IPacket> sendToUserSync(String user, IPacket packet);

    /**
     * 将数据包发送到绑定group的context
     * @param group group
     * @param packet 数据包
     */
    void sendToGroup(String group, IPacket packet);

    /**
     * 将当前context绑定到user
     * @param user user
     */
    void bindUser(String user);

    /**
     * 将当前context绑定到group
     * @param group group
     */
    void bindGroup(String group);

    /**
     * 当前context与user解绑
     * @param user user
     */
    void unbindUser(String user);

    /**
     * 当前context与group解绑
     * @param group group
     */
    void unbindGroup(String group);

    /**
     * 获取用户是否在线
     * @param user 用户标识
     * @return true代表在线
     */
    boolean getUserIsOnline(String user);

    /**
     * 将客户端设置进黑名单
     */
    void setContextToBlacklist();

    /**
     * 从黑名单中删除客户端
     */
    void delContextFromBlacklist();

    /**
     * 查看客户端是否在黑名单中
     *
     * @return true在黑名单中，false不在
     */
    boolean isContextInBlacklist();

}
